#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/9/27 18:27
# @Author  : 朱宽
# @File    : specialComponentPackaging.py
# @Software: Win10、Python3.8.5 and Pycharm
'''
Iframe，Alter，Prompt，Confirm，下拉菜单（select）,等控件和弹窗处理封装
上传文件，参考 书上的 183页
'''
from selenium.webdriver.support.select import Select


class specialComponent():
    '''
    定义了：
    1、用于切换进页面的Iframe控件
    2、用于从Iframe中切换回主页页面
    3、切换进Alert控件。先定位弹窗单击，然后切换进入弹窗，然后进行调用。
    4、通过下拉菜单的索引，完成对选项的选择
    5、通过下拉菜单的索引，取消对选项的选择
    6、通过选项值，完成对选项的选择
    7、通过选项值，取消对选项的选择
    8、通过选项的文本，完成对选项的选择
    9、通过选项的文本，取消对选项的选择
    '''

    def __init__(self, driver):
        self.driver = driver

    def switch_to_iframe(self, frame_element):
        '''
        1、用于切换进页面的Iframe控件
        :param frame_element:
        :return:
        '''
        self.driver.switch_to.frame(frame_element)

    def switch_to_default_content(self):
        '''
        2、用于从Iframe中切换回主页页面
        :return:
        '''
        self.driver.switch_to.default_content()

    def switch_to_alert(self):
        '''
        3、切换进Alert控件。先定位弹窗单击，然后切换进入弹窗，然后进行调用。
        .accept()-是点击确定
        .dismiss()-是点击取消
        .text-是弹窗中的文本
        :return:
        '''
        pop_dailog = self.driver.switch_to.alert
        return pop_dailog

    def select_by_index(self, element, index):
        '''
        4、通过下拉菜单的索引，完成对选项的选择
        :param element:
        :param index:
        :return:
        '''
        Select(element).select_by_index(index)

    def deselect_by_index(self, element, index):
        '''
        5、通过下拉菜单的索引，取消对选项的选择
        :param element:
        :param index:
        :return:
        '''
        Select(element).deselect_by_index(index)

    def select_by_value(self, element, value):
        '''
        6、通过选项值，完成对选项的选择
        :param element:
        :param value:
        :return:
        '''
        Select(element).select_by_value(value)

    def deselect_by_value(self, element, value):
        '''
        7、通过选项值，取消对选项的选择
        :param element:
        :param value:
        :return:
        '''
        Select(element).deselect_by_value(value)

    def select_by_text(self, element, text):
        '''
        8、通过选项的文本，完成对选项的选择
        :param element:
        :param text:
        :return:
        '''
        Select(element).select_by_visible_text(text)

    def deselect_by_text(self, element, text):
        '''
        9、通过选项的文本，取消对选项的选择
        :param element:
        :param text:
        :return:
        '''
        Select(element).deselect_by_visible_text(text)
